//!
/**
 ***********************************************************************************************************
 * <RBTextureSampler Implementation>
 ***********************************************************************************************************
 * @file RBTextureSampler.cpp
 ***********************************************************************************************************/

/***********************************************************************************************************
 * Precompiled Header
 ***********************************************************************************************************/
#include "RBMainPCH.h"

/***********************************************************************************************************
 * Includes
 ***********************************************************************************************************/
#include "RBTextureSampler.h"

/***********************************************************************************************************
 * Defines
 ***********************************************************************************************************/

/***********************************************************************************************************
 * Classes implementation
 ***********************************************************************************************************/


/**************************************************************************************************************************************************************
 * Constructor
 **************************************************************************************************************************************************************/
RBTextureSampler::RBTextureSampler(RBShaderResourceView* pTexture, uint32 uiStage, 
                                   RBSamplerState::AdressMode u, RBSamplerState::AdressMode v, RBSamplerState::AdressMode w, 
                                   RBSamplerState::FilterMode minF, RBSamplerState::FilterMode magF, RBSamplerState::FilterMode mipF, 
                                   uint32 mipBias, uint32 mipMax, uint32 aniso)
: Stage(uiStage)
, Texture(pTexture)
, U(u)
, V(v)
, W(w)
, MinFilter(minF)
, MagFilter(magF)
, MipFilter(mipF)
, MipMapLODBias(mipBias)
, MipMapMaxLevel(mipMax)
, AnisotropyMax(aniso)
{

}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
RBTextureSampler::RBTextureSampler(const RBTextureSampler& src)
{
    *this = src;
}

/**************************************************************************************************************************************************************
 * 
 **************************************************************************************************************************************************************/
RBTextureSampler::~RBTextureSampler()
{
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
void RBTextureSampler::Serialize(RBStream& kStream)
{
    kStream & Stage & U & V & W;
    kStream & MinFilter & MagFilter & MipFilter;
    kStream & MipMapLODBias & MipMapMaxLevel & AnisotropyMax;

    if (kStream.IsReading())
    {
        kStream.LoadLink(Texture);
    }
    else
    {
        kStream.SaveLink(/*Texture && Texture->IsSourceTexture() ? Texture :*/ Texture);
    }
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
RBTextureSampler& RBTextureSampler::operator=(const RBTextureSampler& rhs)
{
    Stage           = rhs.Stage;
    Texture         = rhs.Texture;
    U               = rhs.U;
    V               = rhs.V;
    W               = rhs.W;
    MinFilter       = rhs.MinFilter;
    MagFilter       = rhs.MagFilter;
    MipFilter       = rhs.MipFilter;
    MipMapLODBias   = rhs.MipMapLODBias;
    MipMapMaxLevel  = rhs.MipMapMaxLevel;
    AnisotropyMax   = rhs.AnisotropyMax;
    return *this;
}
/***********************************************************************************************************/
